// eslint-disable-next-line no-unused-vars
import { isWechat, isAlipay, isBaidu, isZlb, isZlbEnv, isMini } from './plantForm';
import { bMapTransQQMap, qqMapTransBMap } from '@/utils';
import { TOKEN } from '@/config/config';
// #ifdef MP-WEIXIN
import QQMapWX from '@/assets/js/qqmap-wx-jssdk.min.js';
// #endif

export function login () {
  return new Promise((resolve) => {
    uni.getProvider({
      service: 'oauth',
      success (res) {
        const [provider] = res.provider;
        console.log(provider);
        const obj = {};
        if (isAlipay) {
          obj.scopes = 'auth_user';
        }
        uni.login({
          provider,
          ...obj,
          success: function (res) {
            resolve(res);
          },
          fail (err) {
            uni.showModal({
              content: err.errMsg
            });
            resolve({ err });
          }
        });
      },
      fail (err) {
        uni.showModal({
          content: err.errMsg
        });
        resolve({ err });
      }
    });
  });
}

// 是否已登录
export function isLogin () {
  return uni.getStorageSync(TOKEN);
}

export function errorLocation ({ errCode, errMsg }) {
  // #ifdef MP-BAIDU
  if (errCode === 10003) {
    uni.showModal({
      content: '用户已拒绝位置授权，前往设置授权'
    });
  }
  // #endif

  // #ifdef MP-WEIXIN
  if (errMsg.includes('auth deny')) {
    uni.showModal({
      content: '用户已拒绝位置授权，前往设置授权'
    });
  }
  // #endif
}

// 获取定位
// 这里不适用uni.getLocation
// transformToBd 是否转成百度坐标 默认true
export function getLocation (transformToBd = true) {
  // canLocation()
  return new Promise((resolve, reject) => {
    // #ifdef MP-ALIPAY
    my.getLocation({
      type: 3, // 获取经纬度和省市区县数据
      success: (res) => {
        const { longitude, latitude, streetNumber: { number, street }, pois } = res;
        const { lng, lat } = qqMapTransBMap(longitude, latitude);
        const address = `${street}${number}${pois && pois[0] && pois[0].name}`;
        resolve({
          longitude: transformToBd ? lng : longitude,
          latitude: transformToBd ? lat : latitude,
          address
        });
      },
      fail: (err) => {
        reject(err);
      }
    });
    // #endif

    // #ifdef MP-WEIXIN
    wx.getLocation({
      type: 'gcj02',
      success: async function (res) {
        const { longitude, latitude } = res;
        const addressRes = await reverseGeocoder(res);
        if (addressRes.errMsg) {
          reject(addressRes);
          return;
        }
        const { lng, lat } = qqMapTransBMap(longitude, latitude);
        resolve({
          ...res,
          longitude: transformToBd ? lng : longitude,
          latitude: transformToBd ? lat : latitude,
          address: addressRes
        });
      },
      fail (err) {
        errorLocation(err);
        reject(err);
      }
    });
    // #endif
    // #ifdef MP-BAIDU
    swan.getLocation({
      type: 'gcj02',
      success: function (res) {
        const { street, streetNumber } = res;
        resolve({
          ...res,
          address: `${street}${streetNumber}`
        });
      },
      fail (err) {
        errorLocation(err);
        reject(err);
      }
    });

    // #endif

    // 浙里办
    if (isZlbEnv) {
      ZWJSBridge.getLocation().then((res) => {
        const { longitude, latitude } = res;
        const { lng, lat } = qqMapTransBMap(longitude, latitude);
        resolve({
          ...res,
          longitude: transformToBd ? lng : longitude,
          latitude: transformToBd ? lat : latitude
        });
        resolve(res);
      }).catch((err) => {
        reject(err);
      });
    }
  });
}

// 微信如果要获取地址 需要逆地址解析
export function reverseGeocoder ({ longitude, latitude }) {
  // #ifdef MP-WEIXIN
  return new Promise((resolve, reject) => {
    // 小程序后台需要添加 安全域名 https://apis.map.qq.com
    const qqmapsdk = new QQMapWX({
      key: 'QU6BZ-2RX6F-UNHJD-NGP43-W66ES-GOFRG' // 必填
    });
    qqmapsdk.reverseGeocoder({
      location: { longitude, latitude },
      success (res) {
        resolve(res.result.address);
      },
      fail (err) {
        reject(err);
      }
    });
  });
  // #endif
}

/**
 * 小程序地图导航
 * @param {address<Object>}
 *  lng // 纬度，范围为-90~90，负数表示南纬 number
    lat // 经度，范围为-180~180，负数表示西经 number
    scale, // 缩放比例 微信默认18, 高德15
    name,  // 地点名称
    address // 具体描述地址 可不填
 */
export function openMap (loc) {
  const { lng, lat, scale, name, address } = loc;
  let app = {};

  // #ifdef MP-WEIXIN
  app = wx;
  // #endif

  // #ifdef MP-ALIPAY
  app = my;
  // #endif

  // #ifdef MP-BAIDU
  app = swan;
  // #endif

  const { lng: longitude, lat: latitude } = bMapTransQQMap(lng, lat);

  if (app) {
    app.openLocation({
      longitude,
      latitude,
      name,
      address,
      scale
    });
  }
}

export function chooseLocation () {
  return new Promise((resolve, reject) => {
    uni.getLocation({
      type: 'gcj02',
      success: function (res) {
        const latitude = res.latitude;
        const longitude = res.longitude;
        uni.chooseLocation({
          latitude,
          longitude,
          success (res) {
            /**
               * 支付宝返回：
               *  address: "西溪路556号"
                  cityName: "杭州市"
                  latitude: 30.267023
                  longitude: 120.107822
                  name: "蚂蚁集团元空间"
                  poiId: "B0FFH3KPBX"
                  provinceName: "浙江省"
              */
            /**
               *  微信和百度返回
               *  address: "浙江省宁波市海曙区灵桥路183号(东恩中学对面)"
                  errMsg: "chooseLocation:ok"
                  latitude: 29.859338
                  longitude: 121.550334
                  name: "汉庭优佳酒店(宁波兴宁桥西地铁站店)"
              */
            // 统一返回处理
            resolve({
              ...res,
              address: res.address
            });
          }
        });
      },
      fail (err) {
        errorLocation(err);
        reject(err.errMsg);
      }
    });
  });
}

// 拨打电话
export function makePhoneCall (phone) {
  if (isZlbEnv) {
    ZWJSBridge.phoneCall({ corpId: phone });
  } else {
    uni.makePhoneCall({
      phoneNumber: phone // 仅为示例
    });
  }
}

// 扫码
export function scan () {
  return new Promise((resolve, reject) => {
    if (isZlbEnv) {
      ZWJSBridge.scan({ type: 'qrCode' }).then(res => {
        resolve(res.text);
      }).catch(err => {
        reject(err);
      });
    } else {
      uni.scanCode({
        success: function (res) {
          resolve(res.result);
        },
        fail (err) {
          reject(err);
        }
      });
    }
  });
}
